#-*- coding:Utf-8 -*-
from Labyrinthe import *
from direct.showbase.DirectObject import DirectObject
from Server import *
import sys

#Classe representant un niveau
class Niveau(DirectObject):
    def __init__(self, nbEquipe, laby3D, world, tailleLaby, tailleParcelles, modeJeu):

        #Composé d'un labyrinthe (ensemble parcelles)
        self.labyrinthe=Labyrinthe(tailleLaby,nbEquipe,tailleParcelles, modeJeu)
        self.labyrinthe.creerLaby()
        self.modeJeu=modeJeu


        #Données relative à l'affichage du niveau
        self.laby3D={}
        #Model des murs
        self.laby3D["boxmodel"]=laby3D["boxmodel"]
        #Echelle des murs
        self.laby3D["scale"]=laby3D["scale"]
        #Liste des murs présents, complété ensuite par là génération du niveau (genererLaby)
        self.laby3D['murs']=laby3D['murs']

        #La map, fixe les bords, le look du sol, plafond etc..
        self.world={}
        #Chargement du model (sol vert + ciel bleu)
        self.world["model"]=world["model"]
        #On place le world au centre du labyrinthe afin qu'il couvre celui-ci intégralement
        #self.world["pos"]=[self.labyrinthe.taille/2,self.labyrinthe.taille/2, 0]
        pos=(tailleLaby*tailleParcelles)/2
        self.world["pos"]=[pos,pos,0]
        #La taille
        self.world["scale"]=world["scale"]
        self.world["size"]=self.labyrinthe.taille
        self.world["maxdistance"]=world["maxdistance"]

        #On génere le laby
        self.genererLaby()

    #Permet d'obtenir la liste des models à afficher (murs, sol...)
    def genererLaby(self):
        bord=0 #permet de savoir lorsqu'on a atteint un bord, donc on incrémente la position sur y
	y=0 #position sur y
	lgLab=self.labyrinthe.taille #Nombre de parcelles par ligne
	lgParc=self.labyrinthe.parcelles[0].taille #Nombre de Cases par Parcelle
	nombreLigneParc=0 #Combien de fois a ton fait LgLab
	nbCasesParParc=lgParc*lgParc #Combien de cases par parcelle
	kx=0 #Emplacement de la parcelle sur lgLab
	cx=0 #Emplacement de la case sur LgParc
	#On parcours l'ensemble des cases du labyrinthe
	for j in range(len(self.labyrinthe.parcelles)):
            if hasattr(self.labyrinthe.parcelles[j],"cases") :
                for i in range(len(self.labyrinthe.parcelles[j].cases)):
                    #Pour chacune, si c'est un mur (X ou non), on ajoute sa position à la liste des murs du niveau
                    if(self.labyrinthe.parcelles[j].cases[i].type=="mur") or (self.labyrinthe.parcelles[j].cases[i].type=="murX"):
                        valx= kx*lgParc+cx
                        self.laby3D['murs'].append([y,valx,0])
                    bord=bord+1
                    cx=cx+1
                    #Si on a atteint le bord, on incrémente la position sur y
                    if(bord==self.labyrinthe.parcelles[j].taille):
                        y=y+1
                        bord=0
                        cx=0
            y=nombreLigneParc*lgParc 
            kx=kx+1
            
            if(kx==self.labyrinthe.taille):
                nombreLigneParc=nombreLigneParc+1
                y=nombreLigneParc*lgParc
                kx=0
                
            

    #Permet l'envoi des données concernant le niveau aux différents clients
    def __str__(self):
        niveauStr={}
        niveauStr["world"]=self.world
        niveauStr["laby"]=self.laby3D
        return str(niveauStr)
